/**
 * 移动零
您已有成功提交记录，请确认是否跳过？

跳过即视为本节
已完成


跳过

重新做题
给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。

示例:

输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:

必须在原数组上操作，不能拷贝额外的数组。
尽量减少操作次数。

 */

/**
 * 将非0的往前挪动，剩下的都是非0的了。
 * @param {*} nums 
 * @returns 
 */
var moveZeroes_one = function(nums) {
    let i = 0,j = 0;
    for(i = 0; i < nums.length; i++) {
        if(nums[i] !== 0) {
            nums[j++] = nums[i]
        }
    }
   
    for(j; j < nums.length; j++) {
        nums[j] = 0;
    }
    return nums
}

// 利用双指针的思路，指针j一直向后移动，如果j的值不等于0才对它进行操作，而i统计的是前面的0的个数
var moveZeroes_two = function(nums) {
    let i = 0; // 统计前面0的个数
    for(let j = 0; j < nums.length; j++) {
        if(nums[j] === 0){
            i++; //
        }else if(i != 0) {
            nums[i - j] = nums[j];
            nums[j] = 0
        }
    }
    return nums
}
moveZeroes([0,1,0,3,12])